<?php
/**
 * Modelo CRUD de informações de envios de mensagens
 * @author Emanuel Melo e Renato Lenz @ PC4 Team
 *
 */
class PC4_Crud_Newsletter_InformacaoEnvio extends PC4_Crud_Abstrato_Rastreado {
	
	/**
	 * Construtor
	 */	
	function __construct($tabela = 'informacoes_envio') {
		parent::__construct($tabela);
	}
	
	/**
	 * Recebe um array com os campos e insere na base de dados o novo registro
	 * @param array $umRegistro
	 * @return O id inserido ou um array com mensagens de erro
	 */
	function insere($umRegistro) {
		// Carrega os modelos para manipulação
		$mMensagens = new PC4_Crud_Newsletter_Mensagem();
		$mDestinatarios = new PC4_Crud_Newsletter_Destinatario();
		
		// Separa os campos de outras tabelas
		$id_mensagem = $umRegistro['id_mensagem'];
		unset($umRegistro['id_mensagem']);
		
		// Recupera os dados dos destinatarios
		$rDestinatario = $mDestinatarios->ve($umRegistro['id_destinatarios']);
		$descritores = array();
		foreach ($rDestinatario->descritores as $descritor) {
			$descritores[$descritor->palavra_chave] = $descritor->valor;
		}
		$umRegistro['descritores'] = json_encode($descritores);
		$umRegistro['contato'] = $rDestinatario->contato;
		
		return parent::insere($umRegistro);
	}
	
	/**
	 * Lista as informações das mensagens que ainda não forma enviadas
	 * @param int $limit Número máximo de mensagens a serem retornadas.
	 */
	function listaNaoEnviados($limite) {
		
		$where = array('data_inicio <' => date("Y-m-d H:i:s"), 'e.ativo' => 1, $this->tabela . '.ativo' => 1, $this->tabela . '.status' => 0);
		
		$this->db->join("envios e", "e.id = " . $this->tabela . ".id_envios");
		$this->db->limit($limite);
		$this->db->where($where);
		$rs = $this->db->get($this->tabela)->result();
		foreach ($rs as $c => $r) {
			$rs[$c] = $this->trataRegistro($r);
		}
		return $rs;
		
	}
	
	/**
	 * Atualiza as informações das mensagens enviadas.
	 * @param array $results Array com informações das mensagens enviadas.
	 * @return void
	 */
	function editaRetornoEnvio($results) {
		foreach($results as $result){
			$where = array(
				'id_envios' => $result['id_envios'],
				'id_destinatarios' => $result['id_destinatarios']
			);
			$data = array(
				'api_id_msg' => $result['api_id_msg'],
				'status' => $result['status'],
				'data_envio' => $result['data_envio']
			);
			$this->db->where($where);
			$this->db->update($this->tabela, $data);
		}
	}
	
	/**
	 * Retona object de registro
	 * @param array $registro
	 * @return Retona object do registro
	 */
	function trataRegistro($registro) {
		$registro->data_envio = sql2date($registro->data_envio, "d/m/Y H:i");
		$registro->data_entrega = sql2date($registro->data_entrega, "d/m/Y H:i");
		return $registro;
	}

	/**
	 * Personaliza a mensagem a partir das informacoes_envio
	 * @param array $envio
	 * @return string texto personalizado
	 */	
	function personalizaMensagem($envio, $delimitador = '{PC4}') {
		$texto = $envio->texto;
		$descritores = (array)json_decode($envio->descritores);
		foreach ($descritores as $palavra_chave => $valor) {
			$texto = str_replace($delimitador . $palavra_chave . $delimitador, $valor, $texto);
		}
//d($texto, 'texto');
		return $texto;
	}
	
}

?>